@@ -775,12 +775,16 @@ def member_activity_list(request, administrator): |
||
| 775 | 775 |
end_time = request.POST.get('end_time', '')
|
| 776 | 776 |
page = request.POST.get('page', 1)
|
| 777 | 777 |
num = request.POST.get('num', 20)
|
| 778 |
+ activity_state = request.POST.get('activity_state', '')
|
|
| 778 | 779 |
|
| 779 | 780 |
logs = MemberActivityInfo.objects.filter(status=True) |
| 780 | 781 |
|
| 781 | 782 |
if activity_type: |
| 782 | 783 |
logs = logs.filter(activity_type=activity_type) |
| 783 | 784 |
|
| 785 |
+ if activity_state: |
|
| 786 |
+ logs = logs.filter(activity_state=activity_state) |
|
| 787 |
+ |
|
| 784 | 788 |
if title: |
| 785 | 789 |
logs = logs.filter(title__icontains=title) |
| 786 | 790 |
|
@@ -1445,8 +1449,16 @@ def member_goods_list(request, administrator): |
||
| 1445 | 1449 |
title = request.POST.get('title', '')
|
| 1446 | 1450 |
page = request.POST.get('page', 1)
|
| 1447 | 1451 |
num = request.POST.get('num', 20)
|
| 1452 |
+ understock = request.POST.get('understock', 0)
|
|
| 1453 |
+ good_state = request.POST.get('good_state', '')
|
|
| 1454 |
+ |
|
| 1455 |
+ logs = GoodsInfo.objects.filter(title__icontains=title).order_by('-pk')
|
|
| 1456 |
+ |
|
| 1457 |
+ if understock: |
|
| 1458 |
+ logs = logs.filter(left_num=0) |
|
| 1448 | 1459 |
|
| 1449 |
- logs = GoodsInfo.objects.filter(title__icontains=title, only_for_member=False).order_by('-pk')
|
|
| 1460 |
+ if good_state: |
|
| 1461 |
+ logs = logs.filter(good_state=good_state) |
|
| 1450 | 1462 |
|
| 1451 | 1463 |
count = logs.count() |
| 1452 | 1464 |
logs, left = pagination(logs, page, num) |
@@ -0,0 +1,30 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+# Generated by Django 3.2.6 on 2023-03-03 08:53 |
|
| 4 |
+ |
|
| 5 |
+from django.db import migrations, models |
|
| 6 |
+ |
|
| 7 |
+ |
|
| 8 |
+class Migration(migrations.Migration): |
|
| 9 |
+ |
|
| 10 |
+ dependencies = [ |
|
| 11 |
+ ('member', '0053_alter_memberactivitygroupshareinfo_unique_together'),
|
|
| 12 |
+ ] |
|
| 13 |
+ |
|
| 14 |
+ operations = [ |
|
| 15 |
+ migrations.AddField( |
|
| 16 |
+ model_name='goodsinfo', |
|
| 17 |
+ name='good_state', |
|
| 18 |
+ field=models.IntegerField(choices=[(1, '上架'), (2, '下架')], db_index=True, default=1, help_text='商品类型', verbose_name='good_state'), |
|
| 19 |
+ ), |
|
| 20 |
+ migrations.AddField( |
|
| 21 |
+ model_name='goodsinfo', |
|
| 22 |
+ name='relate_good_title', |
|
| 23 |
+ field=models.CharField(blank=True, help_text='商品名称', max_length=255, null=True, verbose_name='relate_good_title'), |
|
| 24 |
+ ), |
|
| 25 |
+ migrations.AddField( |
|
| 26 |
+ model_name='goodsorderinfo', |
|
| 27 |
+ name='relate_good_title', |
|
| 28 |
+ field=models.CharField(blank=True, help_text='关联商品', max_length=255, null=True, verbose_name='relate_good_title'), |
|
| 29 |
+ ), |
|
| 30 |
+ ] |
@@ -26,6 +26,14 @@ class GoodsInfo(BaseModelMixin, BrandInfoMixin): |
||
| 26 | 26 |
(VIRTUAL, u'虚拟'), |
| 27 | 27 |
) |
| 28 | 28 |
|
| 29 |
+ SHELVES = 1 |
|
| 30 |
+ OFF_SHELVES = 2 |
|
| 31 |
+ |
|
| 32 |
+ GOOD_STATE_TUPLE = ( |
|
| 33 |
+ (SHELVES, u'上架'), |
|
| 34 |
+ (OFF_SHELVES, u'下架'), |
|
| 35 |
+ ) |
|
| 36 |
+ |
|
| 29 | 37 |
good_id = ShortUUIDField(_(u'good_id'), max_length=32, blank=True, null=True, help_text=u'商品唯一标识', db_index=True, unique=True) |
| 30 | 38 |
good_type = models.IntegerField(_(u'good_type'), choices=GOOD_TYPE_TUPLE, default=VIRTUAL, help_text=u'商品类型', db_index=True) |
| 31 | 39 |
|
@@ -49,8 +57,12 @@ class GoodsInfo(BaseModelMixin, BrandInfoMixin): |
||
| 49 | 57 |
only_for_member = models.BooleanField(_(u'only_for_member'), default=False, help_text=u'会员专属') |
| 50 | 58 |
only_once = models.BooleanField(_(u'only_once'), default=False, help_text=u'仅支持兑换一次') |
| 51 | 59 |
|
| 60 |
+ relate_good_title = models.CharField(_(u'relate_good_title'), max_length=255, blank=True, null=True, help_text=u'商品名称') |
|
| 61 |
+ |
|
| 52 | 62 |
position = models.IntegerField(_(u'position'), default=1, help_text=u'排序', db_index=True) |
| 53 | 63 |
|
| 64 |
+ good_state = models.IntegerField(_(u'good_state'), choices=GOOD_STATE_TUPLE, default=SHELVES, help_text=u'商品类型', db_index=True) |
|
| 65 |
+ |
|
| 54 | 66 |
is_upload_qiniu = models.BooleanField(_(u'is_upload_qiniu'), default=False, help_text=u'是否已上传七牛') |
| 55 | 67 |
|
| 56 | 68 |
class Meta: |
@@ -130,6 +142,8 @@ class GoodsInfo(BaseModelMixin, BrandInfoMixin): |
||
| 130 | 142 |
'fee': self.fee, |
| 131 | 143 |
'value': self.value, |
| 132 | 144 |
'left_num': self.left_num, |
| 145 |
+ 'relate_good_title': self.relate_good_title, |
|
| 146 |
+ 'good_state': self.good_state, |
|
| 133 | 147 |
'coupon': coupon, |
| 134 | 148 |
'created_at': tc.local_string(utc_dt=self.created_at), |
| 135 | 149 |
} |
@@ -144,6 +158,8 @@ class GoodsInfo(BaseModelMixin, BrandInfoMixin): |
||
| 144 | 158 |
'good_id': self.good_id, |
| 145 | 159 |
'good_type': self.good_type, |
| 146 | 160 |
'title': self.title, |
| 161 |
+ 'relate_good_title': self.relate_good_title, |
|
| 162 |
+ 'good_state': self.good_state, |
|
| 147 | 163 |
'image': self.image_url, |
| 148 | 164 |
'image_path': self.image_path, |
| 149 | 165 |
'slider_image': self.slider_image_url, |
@@ -175,6 +191,7 @@ class GoodsOrderInfo(BaseModelMixin, BrandInfoMixin): |
||
| 175 | 191 |
good_type = models.IntegerField(_(u'good_type'), choices=GOOD_TYPE_TUPLE, default=VIRTUAL, help_text=u'商品类型', db_index=True) |
| 176 | 192 |
|
| 177 | 193 |
title = models.CharField(_(u'title'), max_length=255, blank=True, null=True, help_text=u'商品名称') |
| 194 |
+ relate_good_title = models.CharField(_(u'relate_good_title'), max_length=255, blank=True, null=True, help_text=u'关联商品') |
|
| 178 | 195 |
|
| 179 | 196 |
name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'姓名') |
| 180 | 197 |
phone = models.CharField(_(u'phone'), max_length=255, blank=True, null=True, help_text=u'电话') |
@@ -204,6 +221,7 @@ class GoodsOrderInfo(BaseModelMixin, BrandInfoMixin): |
||
| 204 | 221 |
'order_id': self.order_id, |
| 205 | 222 |
'good_id': self.good_id, |
| 206 | 223 |
'good_name': good.title, |
| 224 |
+ 'relate_good_title': self.relate_good_title, |
|
| 207 | 225 |
'good_type': good.good_type, |
| 208 | 226 |
'user_id': self.user_id, |
| 209 | 227 |
'user_name': self.name, |